DTrace probe patch for OS X Leopard

Поиск
Список
Период
Сортировка
От Robert Lor
Тема DTrace probe patch for OS X Leopard
Дата
Msg-id 47C58A45.1090000@sun.com
обсуждение исходный текст
Ответы Re: DTrace probe patch for OS X Leopard  (Alvaro Herrera <alvherre@commandprompt.com>)
Re: DTrace probe patch for OS X Leopard  (Peter Eisentraut <peter_e@gmx.net>)
Re: DTrace probe patch for OS X Leopard  (Peter Eisentraut <peter_e@gmx.net>)
Re: DTrace probe patch for OS X Leopard  (Peter Eisentraut <peter_e@gmx.net>)
Re: DTrace probe patch for OS X Leopard  (Peter Eisentraut <peter_e@gmx.net>)
Список pgsql-patches
Please find the patch attached per this thread
http://archives.postgresql.org/pgsql-hackers/2008-02/msg00912.php

Notes to committer.

1) Please remove src/include/pg_trace.h as it's no longer needed

2) Need help figuring out how to copy src/backend/util/probes.d from src
tree to
 bld tree at build time. It works fine if compilation is done in the src
tree.

3) Note on src/backend/Makefile
   The current rule below does not work. After expansion, utils/probes.d
needs
   to come right after -s, but currently it shows up at the end after
all the .o files.

   utils/probes.o: utils/probes.d $(SUBDIROBJS)
       $(DTRACE) $(DTRACEFLAGS) -G -s $(call expand_subsys,$^) -o $@

  The following works, but I think the correct way is to include
probes.d as a
  dependency and have it show up after -s. I couldn't get it to work
this way with
  my somewhat limited knowledge of makefiles.

  utils/probes.o: $(SUBDIROBJS)
       $(DTRACE) $(DTRACEFLAGS) -G -s $(srcdir)/utils/probes.d -o $@
$(call expand_subsys,$^)


Regards,
-Robert

? src/include/probes_null.h
Index: src/Makefile
===================================================================
RCS file: /projects/cvsroot/pgsql/src/Makefile,v
retrieving revision 1.42
diff -c -r1.42 Makefile
*** src/Makefile    21 Aug 2007 01:11:12 -0000    1.42
--- src/Makefile    27 Feb 2008 03:22:55 -0000
***************
*** 14,19 ****
--- 14,22 ----


  all install installdirs uninstall distprep:
+ ifeq ($(enable_dtrace), yes)
+     $(DTRACE) -h -s $(top_builddir)/src/backend/utils/probes.d -o $(top_builddir)/src/include/probes.h
+ endif
      $(MAKE) -C port $@
      $(MAKE) -C timezone $@
      $(MAKE) -C backend $@
Index: src/backend/Makefile
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/Makefile,v
retrieving revision 1.127
diff -c -r1.127 Makefile
*** src/backend/Makefile    26 Feb 2008 14:42:27 -0000    1.127
--- src/backend/Makefile    27 Feb 2008 03:22:55 -0000
***************
*** 20,28 ****
--- 20,30 ----

  include $(srcdir)/common.mk

+ ifeq ($(PORTNAME), solaris)
  ifeq ($(enable_dtrace), yes)
  LOCALOBJS += utils/probes.o
  endif
+ endif

  OBJS = $(SUBDIROBJS) $(LOCALOBJS) $(top_builddir)/src/port/libpgport_srv.a

***************
*** 135,144 ****
      cd $(dir $@) && rm -f $(notdir $@) && \
          $(LN_S) ../../../$(subdir)/utils/fmgroids.h .

!
! utils/probes.o: utils/probes.d $(SUBDIROBJS)
!     $(DTRACE) $(DTRACEFLAGS) -G -s $(call expand_subsys,$^) -o $@
!

  ##########################################################################

--- 137,146 ----
      cd $(dir $@) && rm -f $(notdir $@) && \
          $(LN_S) ../../../$(subdir)/utils/fmgroids.h .

! ifeq ($(PORTNAME), solaris)
! utils/probes.o: $(SUBDIROBJS)
!     $(DTRACE) $(DTRACEFLAGS) -G -s $(srcdir)/utils/probes.d -o $@ $(call expand_subsys,$^)
! endif

  ##########################################################################

Index: src/backend/access/transam/xact.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/access/transam/xact.c,v
retrieving revision 1.257
diff -c -r1.257 xact.c
*** src/backend/access/transam/xact.c    15 Jan 2008 18:56:59 -0000    1.257
--- src/backend/access/transam/xact.c    27 Feb 2008 03:22:56 -0000
***************
*** 1479,1485 ****
      Assert(MyProc->backendId == vxid.backendId);
      MyProc->lxid = vxid.localTransactionId;

!     PG_TRACE1(transaction__start, vxid.localTransactionId);

      /*
       * set transaction_timestamp() (a/k/a now()).  We want this to be the same
--- 1479,1485 ----
      Assert(MyProc->backendId == vxid.backendId);
      MyProc->lxid = vxid.localTransactionId;

!     POSTGRESQL_TRANSACTION_START(vxid.localTransactionId);

      /*
       * set transaction_timestamp() (a/k/a now()).  We want this to be the same
***************
*** 1604,1610 ****
       */
      latestXid = RecordTransactionCommit();

!     PG_TRACE1(transaction__commit, MyProc->lxid);

      /*
       * Let others know about no transaction in progress by me. Note that this
--- 1604,1610 ----
       */
      latestXid = RecordTransactionCommit();

!     POSTGRESQL_TRANSACTION_COMMIT(MyProc->lxid);

      /*
       * Let others know about no transaction in progress by me. Note that this
***************
*** 1990,1996 ****
       */
      latestXid = RecordTransactionAbort(false);

!     PG_TRACE1(transaction__abort, MyProc->lxid);

      /*
       * Let others know about no transaction in progress by me. Note that this
--- 1990,1996 ----
       */
      latestXid = RecordTransactionAbort(false);

!     POSTGRESQL_TRANSACTION_ABORT(MyProc->lxid);

      /*
       * Let others know about no transaction in progress by me. Note that this
Index: src/backend/storage/lmgr/lock.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v
retrieving revision 1.181
diff -c -r1.181 lock.c
*** src/backend/storage/lmgr/lock.c    2 Feb 2008 22:26:17 -0000    1.181
--- src/backend/storage/lmgr/lock.c    27 Feb 2008 03:22:56 -0000
***************
*** 787,797 ****
           * Sleep till someone wakes me up.
           */

!         PG_TRACE2(lock__startwait, locktag->locktag_field2, lockmode);

          WaitOnLock(locallock, owner);

!         PG_TRACE2(lock__endwait, locktag->locktag_field2, lockmode);

          /*
           * NOTE: do not do any material change of state between here and
--- 787,797 ----
           * Sleep till someone wakes me up.
           */

!         POSTGRESQL_LOCK_STARTWAIT(locktag->locktag_field2, lockmode);

          WaitOnLock(locallock, owner);

!         POSTGRESQL_LOCK_ENDWAIT(locktag->locktag_field2, lockmode);

          /*
           * NOTE: do not do any material change of state between here and
Index: src/backend/storage/lmgr/lwlock.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/storage/lmgr/lwlock.c,v
retrieving revision 1.50
diff -c -r1.50 lwlock.c
*** src/backend/storage/lmgr/lwlock.c    1 Jan 2008 19:45:52 -0000    1.50
--- src/backend/storage/lmgr/lwlock.c    27 Feb 2008 03:22:57 -0000
***************
*** 447,453 ****
          block_counts[lockid]++;
  #endif

!         PG_TRACE2(lwlock__startwait, lockid, mode);

          for (;;)
          {
--- 447,453 ----
          block_counts[lockid]++;
  #endif

!         POSTGRESQL_LWLOCK_STARTWAIT(lockid, mode);

          for (;;)
          {
***************
*** 458,464 ****
              extraWaits++;
          }

!         PG_TRACE2(lwlock__endwait, lockid, mode);

          LOG_LWDEBUG("LWLockAcquire", lockid, "awakened");

--- 458,464 ----
              extraWaits++;
          }

!         POSTGRESQL_LWLOCK_ENDWAIT(lockid, mode);

          LOG_LWDEBUG("LWLockAcquire", lockid, "awakened");

***************
*** 469,475 ****
      /* We are done updating shared state of the lock itself. */
      SpinLockRelease(&lock->mutex);

!     PG_TRACE2(lwlock__acquire, lockid, mode);

      /* Add lock to list of locks held by this backend */
      held_lwlocks[num_held_lwlocks++] = lockid;
--- 469,475 ----
      /* We are done updating shared state of the lock itself. */
      SpinLockRelease(&lock->mutex);

!     POSTGRESQL_LWLOCK_ACQUIRE(lockid, mode);

      /* Add lock to list of locks held by this backend */
      held_lwlocks[num_held_lwlocks++] = lockid;
***************
*** 540,552 ****
          /* Failed to get lock, so release interrupt holdoff */
          RESUME_INTERRUPTS();
          LOG_LWDEBUG("LWLockConditionalAcquire", lockid, "failed");
!         PG_TRACE2(lwlock__condacquire__fail, lockid, mode);
      }
      else
      {
          /* Add lock to list of locks held by this backend */
          held_lwlocks[num_held_lwlocks++] = lockid;
!         PG_TRACE2(lwlock__condacquire, lockid, mode);
      }

      return !mustwait;
--- 540,552 ----
          /* Failed to get lock, so release interrupt holdoff */
          RESUME_INTERRUPTS();
          LOG_LWDEBUG("LWLockConditionalAcquire", lockid, "failed");
!         POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL(lockid, mode);
      }
      else
      {
          /* Add lock to list of locks held by this backend */
          held_lwlocks[num_held_lwlocks++] = lockid;
!         POSTGRESQL_LWLOCK_CONDACQUIRE(lockid, mode);
      }

      return !mustwait;
***************
*** 631,637 ****
      /* We are done updating shared state of the lock itself. */
      SpinLockRelease(&lock->mutex);

!     PG_TRACE1(lwlock__release, lockid);

      /*
       * Awaken any waiters I removed from the queue.
--- 631,637 ----
      /* We are done updating shared state of the lock itself. */
      SpinLockRelease(&lock->mutex);

!     POSTGRESQL_LWLOCK_RELEASE(lockid);

      /*
       * Awaken any waiters I removed from the queue.
Index: src/include/c.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/c.h,v
retrieving revision 1.223
diff -c -r1.223 c.h
*** src/include/c.h    23 Feb 2008 19:11:45 -0000    1.223
--- src/include/c.h    27 Feb 2008 03:22:57 -0000
***************
*** 57,63 ****
  #include "pg_config_os.h"        /* must be before any system header files */
  #endif
  #include "postgres_ext.h"
! #include "pg_trace.h"

  #if _MSC_VER >= 1400
  #define errcode __msvc_errcode
--- 57,67 ----
  #include "pg_config_os.h"        /* must be before any system header files */
  #endif
  #include "postgres_ext.h"
! #ifdef ENABLE_DTRACE
! #include "probes.h"
! #else
! #include "probes_null.h"
! #endif

  #if _MSC_VER >= 1400
  #define errcode __msvc_errcode
/* ----------
 *      probes_null.h
 *
 *      Definitions of probe macros used when DTrace is not enabled.
 *
 *      Copyright (c) 2006-2008, PostgreSQL Global Development Group
 *
 * ----------
 */

#ifndef    _PROBES_NULL_H
#define    _PROBES_NULL_H

#define    POSTGRESQL_LOCK_ENDWAIT(arg0, arg1)
#define    POSTGRESQL_LOCK_ENDWAIT_ENABLED()

#define    POSTGRESQL_LOCK_STARTWAIT(arg0, arg1)
#define    POSTGRESQL_LOCK_STARTWAIT_ENABLED()

#define    POSTGRESQL_LWLOCK_ACQUIRE(arg0, arg1)
#define    POSTGRESQL_LWLOCK_ACQUIRE_ENABLED()

#define    POSTGRESQL_LWLOCK_CONDACQUIRE(arg0, arg1)
#define    POSTGRESQL_LWLOCK_CONDACQUIRE_ENABLED()

#define    POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL(arg0, arg1)
#define    POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL_ENABLED()

#define    POSTGRESQL_LWLOCK_ENDWAIT(arg0, arg1)
#define    POSTGRESQL_LWLOCK_ENDWAIT_ENABLED()

#define    POSTGRESQL_LWLOCK_RELEASE(arg0)
#define    POSTGRESQL_LWLOCK_RELEASE_ENABLED()

#define    POSTGRESQL_LWLOCK_STARTWAIT(arg0, arg1)
#define    POSTGRESQL_LWLOCK_STARTWAIT_ENABLED()

#define    POSTGRESQL_TRANSACTION_ABORT(arg0)
#define    POSTGRESQL_TRANSACTION_ABORT_ENABLED()

#define    POSTGRESQL_TRANSACTION_COMMIT(arg0)
#define    POSTGRESQL_TRANSACTION_COMMIT_ENABLED()

#define    POSTGRESQL_TRANSACTION_START(arg0)
#define    POSTGRESQL_TRANSACTION_START_ENABLED()

#endif    /* _PROBES_NULL_H */

В списке pgsql-patches по дате отправления:

Предыдущее
От: Andrew Dunstan
Дата:
Сообщение: Re: Fix for initdb failures on Vista
Следующее
От: Alvaro Herrera
Дата:
Сообщение: Re: DTrace probe patch for OS X Leopard