|
Lines 471-476
Link Here
|
| 471 |
|
471 |
|
| 472 |
dn,new,old,old_dn=cPickle.load(f) |
472 |
dn,new,old,old_dn=cPickle.load(f) |
| 473 |
|
473 |
|
|
|
474 |
try: |
| 475 |
ud.debug(ud.LDAP, ud.PROCESS, "Synchronize: %s" % dn) |
| 476 |
except: |
| 477 |
ud.debug(ud.LDAP, ud.PROCESS, "Synchronize: object from file %s" % filename) |
| 478 |
pass |
| 479 |
|
| 474 |
def recode_attribs(attribs): |
480 |
def recode_attribs(attribs): |
| 475 |
nattribs={} |
481 |
nattribs={} |
| 476 |
for key in attribs.keys(): |
482 |
for key in attribs.keys(): |
|
Lines 683-689
Link Here
|
| 683 |
# dummy |
689 |
# dummy |
| 684 |
pass |
690 |
pass |
| 685 |
|
691 |
|
| 686 |
|
692 |
def _generate_dn_list_from(self, files): |
|
|
693 |
''' |
| 694 |
Save all filenames in a dictonary with dn as key |
| 695 |
If more than one pickle file was created for one DN we could skip the first one |
| 696 |
''' |
| 697 |
self.dn_list = {} |
| 698 |
for listener_file in files: |
| 699 |
filename = os.path.join(self.listener_dir, listener_file) |
| 700 |
if not filename == "%s/tmp" % self.baseConfig['%s/ad/listener/dir' % self.CONFIGBASENAME]: |
| 701 |
if not filename in self.rejected_files: |
| 702 |
try: |
| 703 |
f=file(filename,'r') |
| 704 |
except IOError: # file not found so there's nothing to sync |
| 705 |
continue |
| 706 |
|
| 707 |
dn,new,old,old_dn=cPickle.load(f) |
| 708 |
if not self.dn_list.get(dn): |
| 709 |
self.dn_list[dn]=[filename] |
| 710 |
else: |
| 711 |
self.dn_list[dn].append(filename) |
| 712 |
|
| 687 |
def poll_ucs(self): |
713 |
def poll_ucs(self): |
| 688 |
''' |
714 |
''' |
| 689 |
poll changes from UCS: iterates over files exported by directory-listener module |
715 |
poll changes from UCS: iterates over files exported by directory-listener module |
|
Lines 693-699
Link Here
|
| 693 |
|
719 |
|
| 694 |
change_counter = 0 |
720 |
change_counter = 0 |
| 695 |
|
721 |
|
| 696 |
rejected_files = self._list_rejected_filenames_ucs() |
722 |
self.rejected_files = self._list_rejected_filenames_ucs() |
| 697 |
|
723 |
|
| 698 |
print "--------------------------------------" |
724 |
print "--------------------------------------" |
| 699 |
print "try to sync %s changes from UCS" % (len(os.listdir(self.listener_dir))-1) |
725 |
print "try to sync %s changes from UCS" % (len(os.listdir(self.listener_dir))-1) |
|
Lines 702-735
Link Here
|
| 702 |
done_counter = 0 |
728 |
done_counter = 0 |
| 703 |
files = os.listdir(self.listener_dir) |
729 |
files = os.listdir(self.listener_dir) |
| 704 |
files.sort() |
730 |
files.sort() |
|
|
731 |
|
| 732 |
# Create a dictonary with all DNs |
| 733 |
self._generate_dn_list_from(files) |
| 734 |
|
| 705 |
for listener_file in files: |
735 |
for listener_file in files: |
| 706 |
sync_successfull = False |
736 |
sync_successfull = False |
| 707 |
delete_file = False |
737 |
delete_file = False |
| 708 |
filename = os.path.join(self.listener_dir, listener_file) |
738 |
filename = os.path.join(self.listener_dir, listener_file) |
| 709 |
if not filename == "%s/tmp" % self.baseConfig['%s/ad/listener/dir' % self.CONFIGBASENAME]: |
739 |
if not filename == "%s/tmp" % self.baseConfig['%s/ad/listener/dir' % self.CONFIGBASENAME]: |
| 710 |
if not filename in rejected_files: |
740 |
if not filename in self.rejected_files: |
| 711 |
try: |
741 |
try: |
| 712 |
sync_successfull = self.__sync_file_from_ucs(filename) |
742 |
f=file(filename,'r') |
| 713 |
except (ldap.SERVER_DOWN, SystemExit): |
743 |
except IOError: # file not found so there's nothing to sync |
| 714 |
raise |
744 |
continue |
| 715 |
except: # FIXME: which exception is to be caught? |
|
|
| 716 |
self._save_rejected_ucs(filename, 'unknown') |
| 717 |
self._debug_traceback(ud.WARN, |
| 718 |
"sync failed, saved as rejected \n\t%s" % filename) |
| 719 |
if sync_successfull: |
| 720 |
os.remove(os.path.join(self.listener_dir,listener_file)) |
| 721 |
change_counter += 1 |
| 722 |
|
745 |
|
|
|
746 |
dn,new,old,old_dn=cPickle.load(f) |
| 747 |
|
| 748 |
if len(self.dn_list.get(dn, [])) < 2: |
| 749 |
# If the list contains more then one file, the DN will be synced later |
| 750 |
try: |
| 751 |
sync_successfull = self.__sync_file_from_ucs(filename) |
| 752 |
except (ldap.SERVER_DOWN, SystemExit): |
| 753 |
raise |
| 754 |
except: # FIXME: which exception is to be caught? |
| 755 |
self._save_rejected_ucs(filename, 'unknown') |
| 756 |
self._debug_traceback(ud.WARN, |
| 757 |
"sync failed, saved as rejected \n\t%s" % filename) |
| 758 |
if sync_successfull: |
| 759 |
os.remove(os.path.join(self.listener_dir,listener_file)) |
| 760 |
change_counter += 1 |
| 761 |
else: |
| 762 |
try: |
| 763 |
ud.debug(ud.LDAP, ud.PROCESS, 'Drop %s. The DN %s will synced later' % (filename, dn)) |
| 764 |
except: |
| 765 |
ud.debug(ud.LDAP, ud.PROCESS, 'Drop %s. The object will synced later' % (filename)) |
| 766 |
|
| 767 |
if self.dn_list.get(dn): |
| 768 |
self.dn_list[dn].remove(filename) |
| 769 |
|
| 723 |
done_counter += 1 |
770 |
done_counter += 1 |
| 724 |
print "%s"%done_counter, |
771 |
print "%s"%done_counter, |
| 725 |
sys.stdout.flush() |
772 |
sys.stdout.flush() |
| 726 |
|
773 |
|
| 727 |
print "" |
774 |
print "" |
| 728 |
|
775 |
|
| 729 |
rejected_files = self._list_rejected_filenames_ucs() |
776 |
self.rejected_files = self._list_rejected_filenames_ucs() |
| 730 |
|
777 |
|
| 731 |
if rejected_files: |
778 |
if self.rejected_files: |
| 732 |
print "Changes from UCS: %s (%s saved rejected)" % (change_counter, len(rejected_files)) |
779 |
print "Changes from UCS: %s (%s saved rejected)" % (change_counter, len(self.rejected_files)) |
| 733 |
else: |
780 |
else: |
| 734 |
print "Changes from UCS: %s (%s saved rejected)" % (change_counter, '0') |
781 |
print "Changes from UCS: %s (%s saved rejected)" % (change_counter, '0') |
| 735 |
print "--------------------------------------" |
782 |
print "--------------------------------------" |