57
57
import com .google .longrunning .Operation ;
58
58
import com .google .protobuf .InvalidProtocolBufferException ;
59
59
import com .google .spanner .admin .database .v1 .CreateBackupMetadata ;
60
+ import com .google .spanner .admin .database .v1 .CopyBackupMetadata ;
60
61
import com .google .spanner .admin .database .v1 .CreateDatabaseMetadata ;
61
62
import com .google .spanner .admin .database .v1 .OptimizeRestoredDatabaseMetadata ;
62
63
import com .google .spanner .admin .database .v1 .RestoreDatabaseMetadata ;
@@ -1659,21 +1660,21 @@ static void cancelCreateBackup(
1659
1660
// [END spanner_cancel_backup_create]
1660
1661
1661
1662
// [START spanner_list_backup_operations]
1662
- static void listBackupOperations (InstanceAdminClient instanceAdminClient , DatabaseId databaseId ) {
1663
+ static void listBackupOperations (
1664
+ InstanceAdminClient instanceAdminClient , DatabaseId databaseId , BackupId backupId ) {
1663
1665
Instance instance = instanceAdminClient .getInstance (databaseId .getInstanceId ().getInstance ());
1664
1666
// Get create backup operations for the sample database.
1665
1667
Timestamp last24Hours = Timestamp .ofTimeSecondsAndNanos (TimeUnit .SECONDS .convert (
1666
1668
TimeUnit .HOURS .convert (Timestamp .now ().getSeconds (), TimeUnit .SECONDS ) - 24 ,
1667
1669
TimeUnit .HOURS ), 0 );
1668
1670
String filter =
1669
1671
String .format (
1670
- "(metadata.database:%s) AND "
1671
- + "(metadata.@type:type.googleapis.com/"
1672
- + "google.spanner.admin.database.v1.CreateBackupMetadata) AND "
1673
- + "(metadata.progress.start_time > \" %s\" )" ,
1674
- databaseId .getName (), last24Hours );
1675
- Page <Operation > operations = instance .listBackupOperations (Options .filter (filter ));
1676
- for (Operation op : operations .iterateAll ()) {
1672
+ "(metadata.@type:type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) "
1673
+ + "AND (metadata.database:%s)" ,
1674
+ databaseId .getName ());
1675
+ Page <Operation > createBackupOperations = instance .listBackupOperations (Options .filter (filter ));
1676
+ System .out .println ("Create Backup Operations:" );
1677
+ for (Operation op : createBackupOperations .iterateAll ()) {
1677
1678
try {
1678
1679
CreateBackupMetadata metadata = op .getMetadata ().unpack (CreateBackupMetadata .class );
1679
1680
System .out .println (
@@ -1687,6 +1688,29 @@ static void listBackupOperations(InstanceAdminClient instanceAdminClient, Databa
1687
1688
System .err .println (e .getMessage ());
1688
1689
}
1689
1690
}
1691
+ // Get copy backup operations for the sample database.
1692
+ filter =
1693
+ String .format (
1694
+ "(metadata.@type:type.googleapis.com/"
1695
+ + "google.spanner.admin.database.v1.CopyBackupMetadata) "
1696
+ + "AND (metadata.source_backup:%s)" ,
1697
+ backupId .getName ());
1698
+ Page <Operation > copyBackupOperations = instance .listBackupOperations (Options .filter (filter ));
1699
+ System .out .println ("Copy Backup Operations:" );
1700
+ for (Operation op : copyBackupOperations .iterateAll ()) {
1701
+ try {
1702
+ CopyBackupMetadata copyBackupMetadata = op .getMetadata ().unpack (CopyBackupMetadata .class );
1703
+ System .out .println (
1704
+ String .format (
1705
+ "Copy Backup %s on backup %s pending: %d%% complete" ,
1706
+ copyBackupMetadata .getName (),
1707
+ copyBackupMetadata .getSourceBackup (),
1708
+ copyBackupMetadata .getProgress ().getProgressPercent ()));
1709
+ } catch (InvalidProtocolBufferException e ) {
1710
+ // The returned operation does not contain CopyBackupMetadata.
1711
+ System .err .println (e .getMessage ());
1712
+ }
1713
+ }
1690
1714
}
1691
1715
// [END spanner_list_backup_operations]
1692
1716
@@ -1840,7 +1864,12 @@ static void updateBackup(DatabaseAdminClient dbAdminClient, BackupId backupId) {
1840
1864
TimeUnit .SECONDS .toMicros (backup .getExpireTime ().getSeconds ())
1841
1865
+ TimeUnit .NANOSECONDS .toMicros (backup .getExpireTime ().getNanos ())
1842
1866
+ TimeUnit .DAYS .toMicros (30L ));
1843
- System .out .println (String .format (
1867
+ // New Expire Time must be less than Max Expire Time
1868
+ expireTime = expireTime .compareTo (backup .getMaxExpireTime ())<0 ?expireTime :backup .getMaxExpireTime ();
1869
+ int timeDiff = expireTime .compareTo (backup .getExpireTime ());
1870
+ Timestamp newExpireTime = (timeDiff < 0 ) ? expireTime : backup .getExpireTime ();
1871
+
1872
+ System .out .println (String .format (
1844
1873
"Updating expire time of backup [%s] to %s..." ,
1845
1874
backupId .toString (),
1846
1875
LocalDateTime .ofEpochSecond (
@@ -2048,7 +2077,7 @@ static void run(
2048
2077
BackupId .of (backup .getInstanceId (), backup .getBackup () + "_cancel" ));
2049
2078
break ;
2050
2079
case "listbackupoperations" :
2051
- listBackupOperations (instanceAdminClient , database );
2080
+ listBackupOperations (instanceAdminClient , database , backup );
2052
2081
break ;
2053
2082
case "listdatabaseoperations" :
2054
2083
listDatabaseOperations (instanceAdminClient , dbAdminClient , database .getInstanceId ());
@@ -2144,14 +2173,14 @@ static void printUsageAndExit() {
2144
2173
System .err .println (" SpannerExample querywithqueryoptions my-instance example-db" );
2145
2174
System .err .println (" SpannerExample createbackup my-instance example-db" );
2146
2175
System .err .println (" SpannerExample listbackups my-instance example-db" );
2147
- System .err .println (" SpannerExample listbackupoperations my-instance example-db" );
2176
+ System .err .println (" SpannerExample listbackupoperations my-instance example-db backup-id " );
2148
2177
System .err .println (" SpannerExample listdatabaseoperations my-instance example-db" );
2149
2178
System .err .println (" SpannerExample restorebackup my-instance example-db" );
2150
2179
System .exit (1 );
2151
2180
}
2152
2181
2153
2182
public static void main (String [] args ) throws Exception {
2154
- if (args .length != 3 ) {
2183
+ if (args .length != 3 && args . length != 4 ) {
2155
2184
printUsageAndExit ();
2156
2185
}
2157
2186
// [START init_client]
@@ -2176,6 +2205,9 @@ public static void main(String[] args) throws Exception {
2176
2205
"%s_%02d" ,
2177
2206
db .getDatabase (), LocalDate .now ().get (ChronoField .ALIGNED_WEEK_OF_YEAR ));
2178
2207
BackupId backup = BackupId .of (db .getInstanceId (), backupName );
2208
+ if ( args .length == 4 ) {
2209
+ backupName = args [3 ];
2210
+ }
2179
2211
2180
2212
// [START init_client]
2181
2213
DatabaseClient dbClient = spanner .getDatabaseClient (db );
0 commit comments