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