This is an automated email from the ASF dual-hosted git repository.

timoninmaxim pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new d07ca84eb42 IGNITE-18979 Add snapshot creation time in SnapshotView 
(#11597)
d07ca84eb42 is described below

commit d07ca84eb425bb97914621405416ba0f14874387
Author: Popov Aleksandr <[email protected]>
AuthorDate: Mon Oct 21 15:20:30 2024 +0300

    IGNITE-18979 Add snapshot creation time in SnapshotView (#11597)
---
 docs/_docs/monitoring-metrics/system-views.adoc            |  1 +
 .../apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java  |  1 +
 .../managers/systemview/walker/SnapshotViewWalker.java     |  4 +++-
 .../cache/persistence/snapshot/IgniteSnapshotManager.java  |  2 ++
 .../persistence/snapshot/IncrementalSnapshotMetadata.java  | 11 +++++++++++
 .../cache/persistence/snapshot/SnapshotMetadata.java       | 11 +++++++++++
 .../apache/ignite/spi/systemview/view/SnapshotView.java    | 14 +++++++++++++-
 .../apache/ignite/internal/metric/SystemViewSelfTest.java  |  2 ++
 .../IncrementalSnapshotCheckBeforeRestoreTest.java         |  2 ++
 9 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/docs/_docs/monitoring-metrics/system-views.adoc 
b/docs/_docs/monitoring-metrics/system-views.adoc
index 915ad69459c..a397930dfbe 100644
--- a/docs/_docs/monitoring-metrics/system-views.adoc
+++ b/docs/_docs/monitoring-metrics/system-views.adoc
@@ -1009,4 +1009,5 @@ The SNAPSHOT view exposes information about local 
snapshots.
 | SNAPSHOT_RECORD_SEGMENT | BIGINT | Index of WAL segment containing 
snapshot's WAL record.
 | INCREMENT_INDEX | INTEGER | Incremental snapshot index.
 | TYPE | VARCHAR | Type of snapshot - full or incremental.
+| SNAPSHOT_TIME | BIGINT | Snapshot creation time.
 |===
diff --git 
a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
 
b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
index 672c5eebd41..76980182b6a 100644
--- 
a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
+++ 
b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
@@ -905,6 +905,7 @@ public class JdbcThinMetadataSelfTest extends 
JdbcThinAbstractSelfTest {
                 "SYS.SNAPSHOT.NAME.null",
                 "SYS.SNAPSHOT.SNAPSHOT_RECORD_SEGMENT.null",
                 "SYS.SNAPSHOT.TYPE.null",
+                "SYS.SNAPSHOT.SNAPSHOT_TIME.null",
                 "SYS.TASKS.AFFINITY_CACHE_NAME.null",
                 "SYS.TASKS.INTERNAL.null",
                 "SYS.TASKS.END_TIME.null",
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/SnapshotViewWalker.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/SnapshotViewWalker.java
index bf65e9f3dd3..8b5e505caa5 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/SnapshotViewWalker.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/SnapshotViewWalker.java
@@ -36,6 +36,7 @@ public class SnapshotViewWalker implements 
SystemViewRowAttributeWalker<Snapshot
         v.accept(4, "snapshotRecordSegment", Long.class);
         v.accept(5, "incrementIndex", Integer.class);
         v.accept(6, "type", String.class);
+        v.accept(7, "snapshotTime", Long.class);
     }
 
     /** {@inheritDoc} */
@@ -47,10 +48,11 @@ public class SnapshotViewWalker implements 
SystemViewRowAttributeWalker<Snapshot
         v.accept(4, "snapshotRecordSegment", Long.class, 
row.snapshotRecordSegment());
         v.accept(5, "incrementIndex", Integer.class, row.incrementIndex());
         v.accept(6, "type", String.class, row.type());
+        v.accept(7, "snapshotTime", Long.class, row.snapshotTime());
     }
 
     /** {@inheritDoc} */
     @Override public int count() {
-        return 7;
+        return 8;
     }
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotManager.java
index 1b1f07d748c..9c8404218e2 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotManager.java
@@ -1083,6 +1083,7 @@ public class IgniteSnapshotManager extends 
GridCacheSharedManagerAdapter
                 req.incrementIndex(),
                 cctx.localNode().consistentId().toString(),
                 pdsSettings.folderName(),
+                clusterSnpReq.startTime(),
                 markWalFut.result()
             );
 
@@ -1228,6 +1229,7 @@ public class IgniteSnapshotManager extends 
GridCacheSharedManagerAdapter
                     req.compress(),
                     
cctx.gridConfig().getDataStorageConfiguration().getPageSize(),
                     grpIds,
+                    clusterSnpReq.startTime(),
                     comprGrpIds,
                     blts,
                     res.parts(),
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotMetadata.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotMetadata.java
index c01bfca45af..6c2978b74cd 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotMetadata.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotMetadata.java
@@ -52,6 +52,9 @@ public class IncrementalSnapshotMetadata implements 
Serializable {
     /** Name of the folder that contains snapshot data. */
     private final String folderName;
 
+    /** Creation timestamp in milliseconds since Unix epoch. */
+    private final long snapshotTime;
+
     /** WAL pointer to {@link IncrementalSnapshotFinishRecord}. */
     private final WALPointer incSnpRec;
 
@@ -62,6 +65,7 @@ public class IncrementalSnapshotMetadata implements 
Serializable {
      * @param consId Consistent id of a node to which this metadata relates.
      * @param folderName Directory name which stores the data files.
      * @param incSnpRec Pointer to {@link IncrementalSnapshotFinishRecord}.
+     * @param snapshotTime Timestamp of the snapshot creation.
      */
     public IncrementalSnapshotMetadata(
         UUID rqId,
@@ -69,6 +73,7 @@ public class IncrementalSnapshotMetadata implements 
Serializable {
         int incIdx,
         String consId,
         String folderName,
+        long snapshotTime,
         WALPointer incSnpRec
     ) {
         this.rqId = rqId;
@@ -76,6 +81,7 @@ public class IncrementalSnapshotMetadata implements 
Serializable {
         this.incIdx = incIdx;
         this.consId = consId;
         this.folderName = folderName;
+        this.snapshotTime = snapshotTime;
         this.incSnpRec = incSnpRec;
     }
 
@@ -109,6 +115,11 @@ public class IncrementalSnapshotMetadata implements 
Serializable {
         return folderName;
     }
 
+    /** @return Creation timestamp in milliseconds since Unix epoch. */
+    public long snapshotTime() {
+        return snapshotTime;
+    }
+
     /**
      * Checks that incremental snapshot is based on this full snapshot.
      *
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotMetadata.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotMetadata.java
index 86f1344ba54..b4691d59941 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotMetadata.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotMetadata.java
@@ -99,6 +99,9 @@ public class SnapshotMetadata implements Serializable {
     @GridToStringInclude
     @Nullable private List<String> warnings;
 
+    /** Creation timestamp in milliseconds since Unix epoch. */
+    private long snapshotTime;
+
     /** */
     private transient Set<Integer> comprGrpIds;
 
@@ -125,6 +128,7 @@ public class SnapshotMetadata implements Serializable {
      * @param bltNodes The set of affected by snapshot baseline nodes.
      * @param snpRecPtr WAL pointer to {@link ClusterSnapshotRecord} if exists.
      * @param masterKeyDigest Master key digest for encrypted caches.
+     * @param snapshotTime of the snapshot creation.
      * @param onlyPrimary If {@code true} snapshot only primary copies of 
partitions.
      * @param dump If {@code true} cache group dump stored.
      * @param encKey Encryption key. For dumps, only.
@@ -137,6 +141,7 @@ public class SnapshotMetadata implements Serializable {
         boolean comprParts,
         int pageSize,
         List<Integer> grpIds,
+        long snapshotTime,
         Collection<Integer> compGrpIds,
         Set<String> bltNodes,
         Set<GroupPartitionId> pairs,
@@ -153,6 +158,7 @@ public class SnapshotMetadata implements Serializable {
         this.comprParts = comprParts;
         this.pageSize = pageSize;
         this.grpIds = grpIds;
+        this.snapshotTime = snapshotTime;
         this.bltNodes = bltNodes;
         this.snpRecPtr = snpRecPtr;
         this.masterKeyDigest = masterKeyDigest;
@@ -262,6 +268,11 @@ public class SnapshotMetadata implements Serializable {
         return dump;
     }
 
+    /** @return Creation timestamp in milliseconds since Unix epoch. */
+    public long snapshotTime() {
+        return snapshotTime;
+    }
+
     /** Save the state of this <tt>HashMap</tt> partitions and cache groups to 
a stream. */
     private void writeObject(java.io.ObjectOutputStream s)
         throws java.io.IOException {
diff --git 
a/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/SnapshotView.java
 
b/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/SnapshotView.java
index 06f582f4230..4b826e378e7 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/SnapshotView.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/SnapshotView.java
@@ -49,6 +49,9 @@ public class SnapshotView {
     /** WAL segment that contains {@link ClusterSnapshotRecord} if exists. */
     private final Long snpRecSeg;
 
+    /** Creation timestamp in milliseconds since Unix epoch. */
+    private final Long snapshotTime;
+
     /** Full or incremental. */
     private final SnapshotType type;
 
@@ -68,6 +71,7 @@ public class SnapshotView {
         consistentId = meta.consistentId();
         baselineNodes = F.concat(meta.baselineNodes(), ",");
         snpRecSeg = meta.snapshotRecordPointer() == null ? null : 
meta.snapshotRecordPointer().index();
+        snapshotTime = meta.snapshotTime();
         incIdx = null;
 
         this.cacheGrps = F.concat(cacheGrps, ",");
@@ -82,7 +86,7 @@ public class SnapshotView {
         consistentId = incMeta.consistentId();
         snpRecSeg = incMeta.incrementalSnapshotPointer().index();
         incIdx = incMeta.incrementIndex();
-
+        snapshotTime = incMeta.snapshotTime();
         baselineNodes = null;
         cacheGrps = null;
     }
@@ -143,6 +147,14 @@ public class SnapshotView {
         return type.name();
     }
 
+    /**
+     *  @return Creation timestamp in milliseconds since Unix epoch.
+     */
+    @Order(7)
+    public Long snapshotTime() {
+        return snapshotTime != 0 ? snapshotTime : null;
+    }
+
     /** Snapshot types. */
     private enum SnapshotType {
         /** Full snapshot. */
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/metric/SystemViewSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/metric/SystemViewSelfTest.java
index ebf2a5388a1..0d31d8107b1 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/metric/SystemViewSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/metric/SystemViewSelfTest.java
@@ -2301,6 +2301,8 @@ public class SystemViewSelfTest extends 
GridCommonAbstractTest {
 
                 assertEquals(ignite.localNode().consistentId().toString(), 
v.consistentId());
                 assertNotNull(v.snapshotRecordSegment());
+                assertTrue("snapshotTime should be non-zero value",
+                        v.snapshotTime() > 0);
 
                 Integer incIdx = v.incrementIndex();
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotCheckBeforeRestoreTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotCheckBeforeRestoreTest.java
index ad94d401065..5a181f97428 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotCheckBeforeRestoreTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotCheckBeforeRestoreTest.java
@@ -276,6 +276,7 @@ public class IncrementalSnapshotCheckBeforeRestoreTest 
extends AbstractSnapshotS
             meta.incrementIndex(),
             meta.consistentId(),
             null,
+            meta.snapshotTime(),
             meta.incrementalSnapshotPointer()), incMetaFile);
 
         for (IgniteEx n : F.asList(srv, grid(GRID_CNT))) {
@@ -308,6 +309,7 @@ public class IncrementalSnapshotCheckBeforeRestoreTest 
extends AbstractSnapshotS
             meta.incrementIndex() + 1,
             meta.consistentId(),
             null,
+            meta.snapshotTime(),
             meta.incrementalSnapshotPointer()), incMetaFile);
 
         for (IgniteEx n : F.asList(srv, grid(GRID_CNT))) {

Reply via email to