[Libguestfs] [PATCH nbdkit] plugins: python: Make threading model explicit

Nir Soffer nsoffer at redhat.com
Tue Feb 1 14:20:29 UTC 2022


The default threading model is already serializing all requests, but
implementing thread_model() gives us good place to explain why the code
works and why we don't use os.preadv and os.pwritev.
---
 plugins/python/examples/error.py | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/plugins/python/examples/error.py b/plugins/python/examples/error.py
index 0331a83e..5cb368d2 100644
--- a/plugins/python/examples/error.py
+++ b/plugins/python/examples/error.py
@@ -11,33 +11,41 @@
 #   ./nbdkit -f -v python ./plugins/python/examples/error.py file=test.img
 #
 # Or run it after installing nbdkit like this:
 #
 #   nbdkit -f -v python ./plugins/python/examples/error.py file=test.img
 #
 # The -f -v arguments are optional.  They cause the server to stay in
 # the foreground and print debugging, which is useful when testing.
 
 import os
+import nbdkit
 
 API_VERSION = 2
 
 filename = None
 calls = 0
 
 
 def config(key, value):
     global filename
     assert key == "file"
     filename = value
 
 
+def thread_model():
+    # Serialize all requests so we can seek safely in pread and pwrite
+    # and be compatible with python 3.6. In python 3.7 we can use
+    # os.preadv and os.pwritev and use the parallel threading model.
+    return nbdkit.THREAD_MODEL_SERIALIZE_ALL_REQUESTS
+
+
 def open(readonly):
     flags = os.O_RDONLY if readonly else os.O_RDWR
     return {"fd": os.open(filename, flags)}
 
 
 def can_extents(h):
     return True
 
 
 def get_size(h):
-- 
2.34.1




More information about the Libguestfs mailing list