Beispiel #1
0
 public static void Write(this Stream ws, TaskCode val)
 {
     using (var writer = new BinaryWriter(ws))
     {
         writer.Write(val);
     }
 }
Beispiel #2
0
 public static void Read(this Stream rs, out TaskCode val)
 {
     using (var reader = new BinaryReader(rs))
     {
         val = new TaskCode(reader.ReadInt32());
     }
 }
Beispiel #3
0
        protected bool RegisterRpcHandler(TaskCode code, string name, RpcRequestHandler handler, UInt64 gpid)
        {
            dsn_rpc_request_handler_t cb = (req, param) =>
            {
                // if handler synchnously processes the incoming request
                // we don't need to add_ref and set owner to true
                // in folloiwng two stmts
                // however, we don't know so we do as follows
                Native.dsn_msg_add_ref(req); // released by RpcReadStream
                var rms = new RpcReadStream(req, true);

                var wms = new RpcWriteStream(Native.dsn_msg_create_response(req));
                handler(rms, wms);
            };

            bool r = Native.dsn_rpc_register_handler(code, name, cb, IntPtr.Zero, gpid);

            Logging.dassert(r, "rpc handler registration failed for " + code.ToString());

            lock (_handlers)
            {
                _handlers.Add(code, cb);
            }
            return(true);
        }
Beispiel #4
0
        //
        // this gives you the task handle so you can wait or cancel
        // the task, with the cost of add/ref the task handle
        //
        public static SafeTaskHandle CallAsync2(
            TaskCode evt,
            Servicelet callbackOwner,
            task_handler callback,
            int hash = 0,
            int delay_milliseconds          = 0,
            int timer_interval_milliseconds = 0
            )
        {
            int    idx = GlobalInterOpLookupTable.Put(callback);
            IntPtr task;

            if (timer_interval_milliseconds == 0)
            {
                task = Native.dsn_task_create(evt, _c_task_handler_holder, (IntPtr)idx, hash);
            }
            else
            {
                task = Native.dsn_task_create_timer(evt, _c_task_handler_holder, (IntPtr)idx, hash, timer_interval_milliseconds);
            }

            var ret = new SafeTaskHandle(task);

            Native.dsn_task_call(task, callbackOwner != null ? callbackOwner.tracker() : IntPtr.Zero, delay_milliseconds);
            return(ret);
        }
Beispiel #5
0
 public RpcWriteStream(TaskCode code, int timeoutMilliseconds, int thread_hash, ulong partition_hash)
     : base(Native.dsn_msg_create_request(code, timeoutMilliseconds, thread_hash, partition_hash), false, false)
 {
     _currentWriteOffset  = 0;
     _currentBufferLength = IntPtr.Zero;
     _length = 0;
 }
Beispiel #6
0
        protected bool UnregisterRpcHandler(TaskCode code, UInt64 gpid)
        {
            Native.dsn_rpc_unregiser_handler(code, gpid);
            bool r;

            lock (_handlers)
            {
                r = _handlers.Remove(code);
            }
            return(r);
        }
Beispiel #7
0
        public static void CallAsync(
            TaskCode evt,
            Clientlet callbackOwner,
            task_handler callback,
            int hash = 0,
            int delay_milliseconds = 0
            )
        {
            var idx  = GlobalInterOpLookupTable.Put(callback);
            var task = Native.dsn_task_create(evt, _c_task_handler_holder, (IntPtr)idx, hash, callbackOwner?.tracker() ?? IntPtr.Zero);

            Native.dsn_task_call(task, delay_milliseconds);
        }
Beispiel #8
0
        public static dsn_task_t CopyRemoteDirectory(
            dsn_address_t remote,
            string source_dir,
            string dest_dir,
            bool overwrite,
            TaskCode callbackCode,
            Servicelet callbackOwner,
            AioHandler callback,
            int hash = 0
            )
        {
            int        idx  = GlobalInterOpLookupTable.Put(callback);
            dsn_task_t task = Native.dsn_file_create_aio_task(callbackCode, _c_aio_handler_holder, (IntPtr)idx, hash);

            Native.dsn_file_copy_remote_directory(remote, source_dir, dest_dir, overwrite, task, callbackOwner != null ? callbackOwner.tracker() : IntPtr.Zero);
            return(task);
        }
Beispiel #9
0
        public static dsn_task_t FileWrite(
            dsn_handle_t hFile,
            byte[] buffer,
            int count,
            UInt64 offset,
            TaskCode callbackCode,
            Servicelet callbackOwner,
            AioHandler callback,
            int hash = 0
            )
        {
            int        idx  = GlobalInterOpLookupTable.Put(callback);
            dsn_task_t task = Native.dsn_file_create_aio_task(callbackCode, _c_aio_handler_holder, (IntPtr)idx, hash);

            Native.dsn_file_write(hFile, buffer, count, offset, task, callbackOwner != null ? callbackOwner.tracker() : IntPtr.Zero);
            return(task);
        }
Beispiel #10
0
        public static SafeTaskHandle CopyRemoteDirectory(
            ulong remote,
            string source_dir,
            string dest_dir,
            bool overwrite,
            TaskCode callbackCode,
            Clientlet callbackOwner,
            AioHandler callback,
            int hash = 0
            )
        {
            var idx  = GlobalInterOpLookupTable.Put(callback);
            var task = Native.dsn_file_create_aio_task(callbackCode, _c_aio_handler_holder, (IntPtr)idx, hash, callbackOwner?.tracker() ?? IntPtr.Zero);

            Native.dsn_file_copy_remote_directory(remote, source_dir, dest_dir, overwrite, task);
            return(new SafeTaskHandle(task, idx));
        }
Beispiel #11
0
        public static SafeTaskHandle FileWrite(
            dsn_handle_t hFile,
            byte[] buffer,
            int count,
            ulong offset,
            TaskCode callbackCode,
            Clientlet callbackOwner,
            AioHandler callback,
            int hash = 0
            )
        {
            var idx  = GlobalInterOpLookupTable.Put(callback);
            var task = Native.dsn_file_create_aio_task(callbackCode, _c_aio_handler_holder, (IntPtr)idx, hash, callbackOwner?.tracker() ?? IntPtr.Zero);

            Native.dsn_file_write(hFile, buffer, count, offset, task);
            return(new SafeTaskHandle(task, idx));
        }
Beispiel #12
0
        protected bool RegisterRpcHandler(TaskCode code, string name, RpcRequestHandlerOneWay handler, UInt64 gpid)
        {
            dsn_rpc_request_handler_t cb = (req, param) =>
            {
                var rms = new RpcReadStream(req, false);
                handler(rms);
            };

            bool r = Native.dsn_rpc_register_handler(code, name, cb, IntPtr.Zero, gpid);

            Logging.dassert(r, "rpc handler registration failed for " + code.ToString());

            lock (_handlers)
            {
                _handlers.Add(code, cb);
            }
            return(r);
        }
Beispiel #13
0
        //
        // this gives you the task handle so you can wait or cancel
        // the task, with the cost of add/ref the task handle
        //
        public static SafeTaskHandle CallAsync2(
            TaskCode evt,
            Clientlet callbackOwner,
            task_handler callback,
            int hash = 0,
            int delay_milliseconds          = 0,
            int timer_interval_milliseconds = 0
            )
        {
            var idx = GlobalInterOpLookupTable.Put(callback);

            var task = timer_interval_milliseconds == 0 ? Native.dsn_task_create(evt, _c_task_handler_holder, (IntPtr)idx, hash, callbackOwner?.tracker() ?? IntPtr.Zero) : Native.dsn_task_create_timer(evt, _c_timer_task_handler_holder, (IntPtr)idx, hash, timer_interval_milliseconds, callbackOwner?.tracker() ?? IntPtr.Zero);

            var ret = new SafeTaskHandle(task, idx);

            Native.dsn_task_call(task, delay_milliseconds);
            return(ret);
        }
Beispiel #14
0
        public static void CallAsync(
            TaskCode evt,
            Servicelet callbackOwner,
            task_handler callback,
            int hash = 0,
            int delay_milliseconds = 0,
            int timer_interval_milliseconds = 0
            )
        {
            int idx = GlobalInterOpLookupTable.Put(callback);
            IntPtr task;

            if (timer_interval_milliseconds == 0)
                task = Native.dsn_task_create(evt, _c_task_handler_holder, (IntPtr)idx, hash);
            else
                task = Native.dsn_task_create_timer(evt, _c_task_handler_holder, (IntPtr)idx, hash, timer_interval_milliseconds);

            Native.dsn_task_call(task, callbackOwner != null ? callbackOwner.tracker() : IntPtr.Zero, delay_milliseconds);
        }
Beispiel #15
0
        protected bool RegisterRpcHandler(TaskCode code, string name, RpcRequestHandler handler)
        {
            dsn_rpc_request_handler_t cb = (dsn_message_t req, IntPtr param) =>
            {
                RpcReadStream  rms = new RpcReadStream(req, false);
                RpcWriteStream wms = new RpcWriteStream(Native.dsn_msg_create_response(req), false);
                handler(rms, wms);
            };

            bool r = Native.dsn_rpc_register_handler(code, name, cb, IntPtr.Zero);

            Logging.dassert(r, "rpc handler registration failed for " + code.ToString());

            lock (_handlers)
            {
                _handlers.Add(code, cb);
            }
            return(true);
        }
 public static void InitCodes()
 {
     RPC_ECHO_ECHO_PING = new TaskCode("RPC_ECHO_ECHO_PING", dsn_task_type_t.TASK_TYPE_RPC_REQUEST, dsn_task_priority_t.TASK_PRIORITY_COMMON, ThreadPoolCode.THREAD_POOL_DEFAULT);
     LPC_ECHO_TEST_TIMER = new TaskCode("LPC_ECHO_TEST_TIMER", dsn_task_type_t.TASK_TYPE_COMPUTE, dsn_task_priority_t.TASK_PRIORITY_COMMON, ThreadPoolCode.THREAD_POOL_DEFAULT);
 }
Beispiel #17
0
 public TaskCode(TaskCode c)
 {
     _code = c._code;
 }
Beispiel #18
0
 public static dsn_task_t CopyRemoteDirectory(
     dsn_address_t remote,
     string source_dir,
     string dest_dir,
     bool overwrite,
     TaskCode callbackCode,
     Servicelet callbackOwner,
     AioHandler callback,
     int hash = 0
     )
 {
     int idx = GlobalInterOpLookupTable.Put(callback);
     dsn_task_t task = Native.dsn_file_create_aio_task(callbackCode, _c_aio_handler_holder, (IntPtr)idx, hash);
     Native.dsn_file_copy_remote_directory(remote, source_dir, dest_dir, overwrite, task, callbackOwner != null ? callbackOwner.tracker() : IntPtr.Zero);
     return task;
 }
Beispiel #19
0
 public static dsn_task_t FileWrite(
     dsn_handle_t hFile,
     byte[] buffer,
     int count,
     UInt64 offset,
     TaskCode callbackCode,
     Servicelet callbackOwner,
     AioHandler callback,
     int hash = 0
     )
 {
     int idx = GlobalInterOpLookupTable.Put(callback);
     dsn_task_t task = Native.dsn_file_create_aio_task(callbackCode, _c_aio_handler_holder, (IntPtr)idx, hash);
     Native.dsn_file_write(hFile, buffer, count, offset, task, callbackOwner != null ? callbackOwner.tracker() : IntPtr.Zero);
     return task;
 }
Beispiel #20
0
 public static SafeTaskHandle FileWrite(
     dsn_handle_t hFile,
     byte[] buffer,
     int count,
     ulong offset,
     TaskCode callbackCode,
     Clientlet callbackOwner,
     AioHandler callback,
     int hash = 0
     )
 {
     var idx = GlobalInterOpLookupTable.Put(callback);
     var task = Native.dsn_file_create_aio_task(callbackCode, _c_aio_handler_holder, (IntPtr)idx, hash, callbackOwner?.tracker() ?? IntPtr.Zero);
     Native.dsn_file_write(hFile, buffer, count, offset, task);
     return new SafeTaskHandle(task, idx);
 }
Beispiel #21
0
 public static SafeTaskHandle CopyRemoteFiles(
     dsn_address_t remote,
     string source_dir,
     string[] files,
     string dest_dir,
     bool overwrite, 
     TaskCode callbackCode,
     Clientlet callbackOwner,
     AioHandler callback,
     int hash = 0
     )
 {
     int idx = GlobalInterOpLookupTable.Put(callback);
     dsn_task_t task = Native.dsn_file_create_aio_task(callbackCode, _c_aio_handler_holder, (IntPtr)idx, hash, callbackOwner != null ? callbackOwner.tracker() : IntPtr.Zero);
     Native.dsn_file_copy_remote_files(remote, source_dir, files, dest_dir, overwrite, task);
     return new SafeTaskHandle(task, idx);
 }
Beispiel #22
0
 public static void CallAsync(
     TaskCode evt,
     Clientlet callbackOwner,
     task_handler callback,
     int hash = 0,
     int delay_milliseconds = 0
     )
 {
     var idx = GlobalInterOpLookupTable.Put(callback);
     var task = Native.dsn_task_create(evt, _c_task_handler_holder, (IntPtr)idx, hash, callbackOwner?.tracker() ?? IntPtr.Zero);
     Native.dsn_task_call(task, delay_milliseconds);
 }
Beispiel #23
0
 public static void Write(this Stream ws, TaskCode val)
 {
     using (var writer = new BinaryWriter(ws))
     {
         writer.Write(val);
     }
 }
Beispiel #24
0
 public static void Read(this Stream rs, out TaskCode val)
 {
     using (var reader = new BinaryReader(rs))
     {
         val = new TaskCode(reader.ReadInt32());
     }
 }
Beispiel #25
0
 public RpcWriteStream(TaskCode code, int timeoutMilliseconds, ulong hash)
     : base(Native.dsn_msg_create_request(code, timeoutMilliseconds, hash), false, false)
 {
     _currentWriteOffset = 0;
     _currentBufferLength = IntPtr.Zero;
     _length = 0;
 }
Beispiel #26
0
 public TaskCode(TaskCode c)
 {
     _code = c._code;
 }
Beispiel #27
0
 public static SafeTaskHandle FileRead(
     dsn_handle_t hFile,
     byte[] buffer,
     int count,
     UInt64 offset,
     TaskCode callbackCode,
     Clientlet callbackOwner,
     AioHandler callback,
     int hash = 0
     )
 {
     int idx = GlobalInterOpLookupTable.Put(callback);
     dsn_task_t task = Native.dsn_file_create_aio_task(callbackCode, _c_aio_handler_holder, (IntPtr)idx, hash, callbackOwner != null ? callbackOwner.tracker() : IntPtr.Zero);
     Native.dsn_file_read(hFile, buffer, count, offset, task);
     return new SafeTaskHandle(task, idx);
 }
Beispiel #28
0
 public static SafeTaskHandle CopyRemoteDirectory(
     ulong remote,
     string source_dir,
     string dest_dir,
     bool overwrite,
     TaskCode callbackCode,
     Clientlet callbackOwner,
     AioHandler callback,
     int hash = 0
     )
 {
     var idx = GlobalInterOpLookupTable.Put(callback);
     var task = Native.dsn_file_create_aio_task(callbackCode, _c_aio_handler_holder, (IntPtr)idx, hash, callbackOwner?.tracker() ?? IntPtr.Zero);
     Native.dsn_file_copy_remote_directory(remote, source_dir, dest_dir, overwrite, task);
     return new SafeTaskHandle(task, idx);
 }            
Beispiel #29
0
        //
        // this gives you the task handle so you can wait or cancel
        // the task, with the cost of add/ref the task handle
        // 
        public static SafeTaskHandle CallAsync2(
            TaskCode evt,
            Clientlet callbackOwner,
            task_handler callback,
            int hash = 0,
            int delay_milliseconds = 0,
            int timer_interval_milliseconds = 0
            )
        {
            var idx = GlobalInterOpLookupTable.Put(callback);

            var task = timer_interval_milliseconds == 0 ? Native.dsn_task_create(evt, _c_task_handler_holder, (IntPtr)idx, hash, callbackOwner?.tracker() ?? IntPtr.Zero) : Native.dsn_task_create_timer(evt, _c_timer_task_handler_holder, (IntPtr)idx, hash, timer_interval_milliseconds, callbackOwner?.tracker() ?? IntPtr.Zero);

            var ret = new SafeTaskHandle(task, idx);
            Native.dsn_task_call(task, delay_milliseconds);
            return ret;
        }