/// <summary> /// Writes buffer data to the specified writer. /// </summary> private void WriteBuffer(DataStreamerClientBuffer <TK, TV> buffer, BinaryWriter w) { w.WriteInt(_cacheId); w.WriteByte((byte)_flags); w.WriteInt(ServerBufferSizeAuto); // Server per-node buffer size. w.WriteInt(ServerBufferSizeAuto); // Server per-thread buffer size. if (_options.Receiver != null) { var rcvHolder = new StreamReceiverHolder(_options.Receiver, (rec, grid, cache, stream, keepBinary) => StreamReceiverHolder.InvokeReceiver((IStreamReceiver <TK, TV>)rec, grid, cache, stream, keepBinary)); w.WriteObjectDetached(rcvHolder); w.WriteByte(ClientPlatformId.Dotnet); } else { w.WriteObject <object>(null); } var count = buffer.Count; w.WriteInt(count); var entries = buffer.Entries; for (var i = 0; i < count; i++) { var entry = entries[i]; if (entry.IsEmpty) { continue; } w.WriteObjectDetached(entry.Key); if (entry.Remove) { w.WriteObject <object>(null); } else { w.WriteObjectDetached(entry.Val); } } }
/// <summary> /// Perform simple out-in operation accepting two arguments. /// </summary> /// <param name="type">Operation type.</param> /// <param name="val1">Value.</param> /// <param name="val2">Value.</param> /// <returns>Result.</returns> protected TR DoOutInOp <T1, T2, TR>(int type, T1 val1, T2 val2) { using (PlatformMemoryStream outStream = IgniteManager.Memory.Allocate().GetStream()) { using (PlatformMemoryStream inStream = IgniteManager.Memory.Allocate().GetStream()) { BinaryWriter writer = _marsh.StartMarshal(outStream); writer.WriteObject(val1); writer.WriteObject(val2); FinishMarshal(writer); UU.TargetInStreamOutStream(_target, type, outStream.SynchronizeOutput(), inStream.MemoryPointer); inStream.SynchronizeInput(); return(Unmarshal <TR>(inStream)); } } }
/// <summary> /// Writes the scan query. /// </summary> private void WriteScanQuery(BinaryWriter writer, ScanQuery <TK, TV> qry) { Debug.Assert(qry != null); if (qry.Filter == null) { writer.WriteByte(BinaryUtils.HdrNull); } else { var holder = new CacheEntryFilterHolder(qry.Filter, (key, val) => qry.Filter.Invoke( new CacheEntry <TK, TV>((TK)key, (TV)val)), writer.Marshaller, _keepBinary); writer.WriteObject(holder); writer.WriteByte(FilterPlatformDotnet); } writer.WriteInt(qry.PageSize); writer.WriteInt(qry.Partition ?? -1); writer.WriteBoolean(qry.Local); }
/// <summary> /// Writes this instance to the specified writer. /// </summary> /// <param name="writer">The writer.</param> internal void Write(BinaryWriter writer) { // Make sure system marshaller is used. Debug.Assert(writer.Marshaller == BinaryUtils.Marshaller); writer.WriteInt((int)AtomicityMode); writer.WriteInt(Backups); writer.WriteInt((int)CacheMode); writer.WriteBoolean(CopyOnRead); writer.WriteBoolean(EagerTtl); writer.WriteBoolean(Invalidate); writer.WriteBoolean(KeepBinaryInStore); writer.WriteBoolean(LoadPreviousValue); writer.WriteLong((long)LockTimeout.TotalMilliseconds); #pragma warning disable 618 writer.WriteLong((long)LongQueryWarningTimeout.TotalMilliseconds); #pragma warning restore 618 writer.WriteInt(MaxConcurrentAsyncOperations); writer.WriteString(Name); writer.WriteBoolean(ReadFromBackup); writer.WriteInt(RebalanceBatchSize); writer.WriteLong((long)RebalanceDelay.TotalMilliseconds); writer.WriteInt((int)RebalanceMode); writer.WriteLong((long)RebalanceThrottle.TotalMilliseconds); writer.WriteLong((long)RebalanceTimeout.TotalMilliseconds); writer.WriteBoolean(SqlEscapeAll); writer.WriteInt(WriteBehindBatchSize); writer.WriteBoolean(WriteBehindEnabled); writer.WriteLong((long)WriteBehindFlushFrequency.TotalMilliseconds); writer.WriteInt(WriteBehindFlushSize); writer.WriteInt(WriteBehindFlushThreadCount); writer.WriteBoolean(WriteBehindCoalescing); writer.WriteInt((int)WriteSynchronizationMode); writer.WriteBoolean(ReadThrough); writer.WriteBoolean(WriteThrough); writer.WriteBoolean(EnableStatistics); writer.WriteString(MemoryPolicyName); writer.WriteInt((int)PartitionLossPolicy); writer.WriteString(GroupName); writer.WriteObject(CacheStoreFactory); writer.WriteInt(SqlIndexMaxInlineSize); if (QueryEntities != null) { writer.WriteInt(QueryEntities.Count); foreach (var entity in QueryEntities) { if (entity == null) { throw new InvalidOperationException("Invalid cache configuration: QueryEntity can't be null."); } entity.Write(writer); } } else { writer.WriteInt(0); } if (NearConfiguration != null) { writer.WriteBoolean(true); NearConfiguration.Write(writer); } else { writer.WriteBoolean(false); } EvictionPolicyBase.Write(writer, EvictionPolicy); AffinityFunctionSerializer.Write(writer, AffinityFunction); ExpiryPolicySerializer.WritePolicyFactory(writer, ExpiryPolicyFactory); if (PluginConfigurations != null) { writer.WriteInt(PluginConfigurations.Count); foreach (var cachePlugin in PluginConfigurations) { if (cachePlugin == null) { throw new InvalidOperationException("Invalid cache configuration: " + "ICachePluginConfiguration can't be null."); } if (cachePlugin.CachePluginConfigurationClosureFactoryId != null) { writer.WriteBoolean(true); writer.WriteInt(cachePlugin.CachePluginConfigurationClosureFactoryId.Value); int pos = writer.Stream.Position; writer.WriteInt(0); // Reserve size. cachePlugin.WriteBinary(writer); writer.Stream.WriteInt(pos, writer.Stream.Position - pos - 4); // Write size. } else { writer.WriteBoolean(false); writer.WriteObject(cachePlugin); } } } else { writer.WriteInt(0); } }