|
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(): |
|
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 |
|
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) |
|
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 "--------------------------------------" |