private RemoteUpdateResult HandleSuccessResponse(RemoteUpdateResult lastUpdateResult, Response response, Uri replica)
        {
            if (!response.HasContent)
            {
                throw Empty200ResponseException();
            }

            if (response.Headers.LastModified == null)
            {
                throw MissingLastModifiedHeaderException();
            }

            var version = DateTime.Parse(response.Headers.LastModified, null, DateTimeStyles.AssumeUniversal).ToUniversalTime();

            if (lastUpdateResult != null && version <= lastUpdateResult.Version)
            {
                if (version < lastUpdateResult.Version)
                {
                    LogStaleVersion(version, lastUpdateResult.Version);
                }

                return(new RemoteUpdateResult(false, lastUpdateResult.Tree, lastUpdateResult.Version));
            }

            var tree = new RemoteTree(response.Content.ToArray(), TreeSerializers.V1);

            LogReceivedNewZone(tree, version, replica);

            return(new RemoteUpdateResult(true, tree, version));
        }
Esempio n. 2
0
        public MainForm()
        {
            InitializeComponent();
            this.ArchiveContentsTreeView.MouseUp += this.On_TreeView_MouseUp;

            var remoteTree = new RemoteTree();

            remoteTree.Thing(this.RemoteFileTree);
        }
 public ClusterConfigClientState(
     [CanBeNull] ISettingsNode localTree,
     [CanBeNull] RemoteTree remoteTree,
     [NotNull] RecyclingBoundedCache <ClusterConfigPath, ISettingsNode> cache,
     long version)
 {
     LocalTree  = localTree;
     RemoteTree = remoteTree;
     Cache      = cache;
     Version    = version;
 }
Esempio n. 4
0
 public ActionResult GetRemoteTree(string path)
 {
     try
     {
         RemoteTree      tree       = new RemoteTree(path);
         List <BaseNode> remoteTree = tree.GetTree();
         return(Json(remoteTree, JsonRequestBehavior.AllowGet));
     }
     catch (Exception e)
     {
         return(HttpNotFound(e.Message));
     }
 }
        public void TestSetup()
        {
            log = new ConsoleLog();

            client = Substitute.For <IClusterClient>();

            enabledUpdater  = new RemoteUpdater(true, client, log, "default");
            disabledUpdater = new RemoteUpdater(false, null, log, "default");

            cancellation = new CancellationTokenSource();

            tree1 = new RemoteTree(Guid.NewGuid().ToByteArray(), TreeSerializers.V1);
            tree2 = new RemoteTree(Guid.NewGuid().ToByteArray(), TreeSerializers.V1);

            version1 = DateTime.UtcNow;
            version1 = new DateTime(version1.Year, version1.Month, version1.Day, version1.Hour, version1.Minute, version1.Second, 0, version1.Kind);
            version2 = version1 + 1.Hours();
        }
        private ISettingsNode Extract(ClusterConfigPath path)
        {
            if (state == null)
            {
                RemoteTree remote;

                if (remoteTree == null)
                {
                    remote = null;
                }
                else
                {
                    var writer = new BinaryBufferWriter(64);

                    TreeSerializers.V1.Serialize(remoteTree, writer);

                    remote = new RemoteTree(writer.Buffer.Take(writer.Length).ToArray(), TreeSerializers.V1);
                }

                state = new ClusterConfigClientState(localTree, remote, new RecyclingBoundedCache <ClusterConfigPath, ISettingsNode>(10), Int64.MaxValue);
            }

            return(TreeExtractor.Extract(state, path, null));
        }
Esempio n. 7
0
 public RemoteUpdateResult(bool changed, [CanBeNull] RemoteTree tree, DateTime version)
 {
     Changed = changed;
     Tree    = tree;
     Version = version;
 }
 private void LogReceivedNewZone(RemoteTree tree, DateTime version, Uri replica)
 => log.Info("Received new version of zone '{Zone}' from {Replica}. Size = {Size}. Version = {Version}.",
             zone, replica?.Authority, tree.Size, version.ToString("R"));