Changeset 30630 for trunk/PS-IPP-Config
- Timestamp:
- Feb 14, 2011, 11:35:24 AM (15 years ago)
- File:
-
- 1 edited
-
trunk/PS-IPP-Config/lib/PS/IPP/Config.pm (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/PS-IPP-Config/lib/PS/IPP/Config.pm
r30316 r30630 1148 1148 if ($neb->storage_object_exists($output)) { 1149 1149 if ($delete_existing) { 1150 # avoid dead instances by moving the file before deleting it. 1151 # append current time to form new name 1152 my $todelete; 1153 eval { 1154 # parse the key so that we can compute the new name 1155 require Nebulous::Key; 1156 }; 1157 if ($@) { 1158 carp "Can't find Nebulous::Key"; 1159 $$r_error = $PS_EXIT_CONFIG_ERROR; 1160 return undef; 1161 } 1162 eval { 1163 # parse the key so that we can compute the new name 1164 my $neb_key = Nebulous::Key::parse_neb_key($output); 1165 die "parse_neb_key failed" if !$neb_key; 1166 my $path = $neb_key->path; 1167 die "neb_key has no path" if !$path; 1168 my $ticks = time(); 1169 $todelete = "ipp_trash/$path.$ticks"; 1170 $neb->move($output, $todelete); 1171 }; 1172 if ($@) { 1173 carp "nebulous move failed for $output"; 1150 $$r_error = $self->_kill_nebulous_file($output); 1151 if ($$r_error) { 1174 1152 $output = undef; 1175 $$r_error = $PS_EXIT_SYS_ERROR;1176 }1177 if ($todelete) {1178 eval {1179 $neb->delete($todelete);1180 };1181 if ($@) {1182 carp "nebulous delete for $todelete failed. Ignoring.\n";1183 $$r_error = $PS_EXIT_SYS_ERROR;1184 }1185 1153 } 1186 1154 } else { 1187 1155 # Make sure that there is only 1 instance. 1188 1189 1156 eval { 1190 1157 $neb->there_can_be_only_one($output); … … 1198 1165 } 1199 1166 return $output; 1167 } 1168 1169 # _kill_nebulous_file: reliably get a nebulous file out of way. 1170 # First move it to the trash then attempt to delete it. No failure if delete fails. 1171 # The file is in the trash. 1172 # Assumes that file is a nebulous file with a storage object that exists 1173 # Users should call kill_file() 1174 # Returns 0 on success otherwise and a PS_EXIT error code on failure 1175 sub _kill_nebulous_file { 1176 my $self = shift; 1177 my $filename = shift; 1178 my $neb = $self->nebulous; 1179 1180 # avoid dead instances by moving the file before deleting it. 1181 # append current time to form new name 1182 my $todelete; 1183 eval { 1184 # parse the key so that we can compute the new name 1185 require Nebulous::Key; 1186 }; 1187 if ($@) { 1188 carp "Can't find Nebulous::Key"; 1189 return $PS_EXIT_CONFIG_ERROR; 1190 } 1191 eval { 1192 # parse the key so that we can compute the new name 1193 my $neb_key = Nebulous::Key::parse_neb_key($filename); 1194 die "parse_neb_key failed" if !$neb_key; 1195 my $path = $neb_key->path; 1196 die "neb_key has no path" if !$path; 1197 my $ticks = time(); 1198 $todelete = "ipp_trash/$path.$ticks"; 1199 $neb->move($filename, $todelete); 1200 }; 1201 if ($@) { 1202 carp "nebulous move failed for $filename"; 1203 return $PS_EXIT_SYS_ERROR; 1204 } 1205 if ($todelete) { 1206 eval { 1207 $neb->delete($todelete); 1208 }; 1209 if ($@) { 1210 carp "nebulous delete for $todelete failed. Ignoring.\n"; 1211 return $PS_EXIT_SYS_ERROR; 1212 } 1213 } 1214 return 0; 1215 } 1216 1217 # user level interface to kill_file reliably get a file out of way. 1218 # 1219 # If a nebulous file, move it to the trash then attempt to delete it. 1220 # if non nebulous file just delete it. 1221 # Returns 0 on success otherwise and a PS_EXIT error code on failure 1222 1223 sub kill_file { 1224 my $self = shift; 1225 my $filename = shift; 1226 my $neb = $self->nebulous; 1227 1228 my $scheme = file_scheme($filename); 1229 if (!$scheme or ($scheme ne 'neb')) { 1230 if ($self->file_exists($filename)) { 1231 if (!$self->file_delete($filename)) { 1232 carp "failed to delete $filename"; 1233 return $PS_EXIT_SYS_ERROR; 1234 } 1235 } 1236 } elsif ($neb->storage_object_exists($filename)) { 1237 $self->_kill_nebulous_file($filename); 1238 } 1239 return 0; 1200 1240 } 1201 1241
Note:
See TracChangeset
for help on using the changeset viewer.
