List:Commits« Previous MessageNext Message »
From:Christopher Powers Date:December 7 2010 7:50pm
Subject:bzr push into mysql-trunk-wl4896 branch (chris.powers:3210 to 3211) WL#4896
View as plain text  
 3211 Christopher Powers	2010-12-07
      WL#4896 Performance schema Net IO
      
      Merge with mysql-trunk: Forgot to 'bzr add' two files

    added:
      storage/perfschema/table_socket_instances.cc
      storage/perfschema/table_socket_instances.h
 3210 Christopher Powers	2010-12-07
      WL#4896 Performance schema NET IO
      
      Merge with mysql-trunk

    added:
      include/mysql/psi/mysql_socket.h
    modified:
      include/mysql/psi/psi.h
      include/mysql/psi/psi_abi_v1.h.pp
      include/mysql/psi/psi_abi_v2.h.pp
      scripts/mysql_system_tables.sql
      sql/mysqld.cc
      sql/mysqld.h
      storage/perfschema/CMakeLists.txt
      storage/perfschema/ha_perfschema.cc
      storage/perfschema/pfs.cc
      storage/perfschema/pfs_column_types.h
      storage/perfschema/pfs_column_values.cc
      storage/perfschema/pfs_column_values.h
      storage/perfschema/pfs_engine_table.cc
      storage/perfschema/pfs_events_waits.h
      storage/perfschema/pfs_instr.cc
      storage/perfschema/pfs_instr.h
      storage/perfschema/pfs_instr_class.cc
      storage/perfschema/pfs_instr_class.h
      storage/perfschema/pfs_server.h
      storage/perfschema/pfs_stat.h
      storage/perfschema/table_all_instr.cc
      storage/perfschema/table_all_instr.h
      storage/perfschema/table_events_waits.cc
      storage/perfschema/table_events_waits_summary.cc
      storage/perfschema/table_events_waits_summary.h
      storage/perfschema/table_helper.h
      storage/perfschema/table_setup_instruments.cc
      vio/vio.c
      vio/viosocket.c
=== added file 'storage/perfschema/table_socket_instances.cc'
--- a/storage/perfschema/table_socket_instances.cc	1970-01-01 00:00:00 +0000
+++ b/storage/perfschema/table_socket_instances.cc	2010-12-07 19:50:08 +0000
@@ -0,0 +1,217 @@
+/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; version 2 of the License.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software Foundation,
+  51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+/**
+  @file storage/perfschema/table_socket_instances.cc
+  Table SOCKET_INSTANCES (implementation).
+*/
+
+#include "my_global.h"
+#include "my_pthread.h"
+#include "pfs_instr.h"
+#include "pfs_column_types.h"
+#include "pfs_column_values.h"
+#include "table_socket_instances.h"
+#include "pfs_global.h"
+
+THR_LOCK table_socket_instances::m_table_lock;
+
+static const TABLE_FIELD_TYPE field_types[]=
+{
+  {
+    { C_STRING_WITH_LEN("EVENT_NAME") },
+    { C_STRING_WITH_LEN("varchar(128)") },
+    { NULL, 0}
+  },
+  {
+    { C_STRING_WITH_LEN("OBJECT_INSTANCE_BEGIN") },
+    { C_STRING_WITH_LEN("bigint(20)") },
+    { NULL, 0}
+  },
+  {
+    { C_STRING_WITH_LEN("SOCKET_ID") },
+    { C_STRING_WITH_LEN("int(11)") },
+    { NULL, 0}
+  },
+  {
+    { C_STRING_WITH_LEN("IP") },
+    { C_STRING_WITH_LEN("varchar(128)") },
+    { NULL, 0}
+  },
+  {
+    { C_STRING_WITH_LEN("PORT") },
+    { C_STRING_WITH_LEN("int(11)") },
+    { NULL, 0}
+  },
+  {
+    { C_STRING_WITH_LEN("BYTES_READ") },
+    { C_STRING_WITH_LEN("bigint(20)") },
+    { NULL, 0}
+  },
+  {
+    { C_STRING_WITH_LEN("BYTES_WRITE") },
+    { C_STRING_WITH_LEN("bigint(20)") },
+    { NULL, 0}
+  }
+};
+
+
+TABLE_FIELD_DEF
+table_socket_instances::m_field_def=
+{ 7, field_types };
+
+PFS_engine_table_share
+table_socket_instances::m_share=
+{
+  { C_STRING_WITH_LEN("socket_instances") },
+  &pfs_readonly_acl,
+  &table_socket_instances::create,
+  NULL, /* write_row */
+  NULL, /* delete_all_rows */
+  1000, /* records */
+  sizeof(PFS_simple_index),
+  &m_table_lock,
+  &m_field_def,
+  false /* checked */
+};
+
+PFS_engine_table* table_socket_instances::create(void)
+{
+  return new table_socket_instances();
+}
+
+table_socket_instances::table_socket_instances()
+  : PFS_engine_table(&m_share, &m_pos),
+  m_row_exists(false), m_pos(0), m_next_pos(0)
+{}
+
+void table_socket_instances::reset_position(void)
+{
+  m_pos.m_index= 0;
+  m_next_pos.m_index= 0;
+}
+
+int table_socket_instances::rnd_next(void)
+{
+  PFS_socket *pfs;
+
+  for (m_pos.set_at(&m_next_pos);
+       m_pos.m_index < socket_instances_max;
+       m_pos.next())
+  {
+    pfs= &socket_array[m_pos.m_index];
+    if (pfs->m_lock.is_populated())
+    {
+      make_row(pfs);
+      m_next_pos.set_after(&m_pos);
+      return 0;
+    }
+  }
+
+  return HA_ERR_END_OF_FILE;
+}
+
+int table_socket_instances::rnd_pos(const void *pos)
+{
+  PFS_socket *pfs;
+
+  set_position(pos);
+  DBUG_ASSERT(m_pos.m_index < socket_instances_max);
+  pfs= &socket_array[m_pos.m_index];
+
+  if (! pfs->m_lock.is_populated())
+    return HA_ERR_RECORD_DELETED;
+
+  make_row(pfs);
+  return 0;
+}
+
+void table_socket_instances::make_row(PFS_socket *pfs)
+{
+  pfs_lock lock;
+  PFS_socket_class *safe_class;
+
+  m_row_exists= false;
+
+  /* Protect this reader against a socket delete */
+  pfs->m_lock.begin_optimistic_lock(&lock);
+
+  safe_class= sanitize_socket_class(pfs->m_class);
+  if (unlikely(safe_class == NULL))
+    return;
+
+  m_row.m_event_name=         safe_class->m_name;
+  m_row.m_event_name_length=  safe_class->m_name_length;
+  m_row.m_identity=           pfs->m_identity;
+  m_row.m_fd=                 pfs->m_fd;
+  m_row.m_ip=                 pfs->m_ip;
+  m_row.m_ip_length=          pfs->m_ip_length;
+  m_row.m_port=               pfs->m_port;
+  m_row.m_bytes_read=         pfs->m_socket_stat.m_recv_bytes;
+  m_row.m_bytes_write=        pfs->m_socket_stat.m_send_bytes;
+
+  if (pfs->m_lock.end_optimistic_lock(&lock))
+    m_row_exists= true;
+}
+
+int table_socket_instances::read_row_values(TABLE *table,
+                                          unsigned char *,
+                                          Field **fields,
+                                          bool read_all)
+{
+  Field *f;
+
+  if (unlikely(!m_row_exists))
+    return HA_ERR_RECORD_DELETED;
+
+  /* Set the null bits */
+  DBUG_ASSERT(table->s->null_bytes == 0);
+
+  for (; (f= *fields) ; fields++)
+  {
+    if (read_all || bitmap_is_set(table->read_set, f->field_index))
+    {
+      switch(f->field_index)
+      {
+      case 0: /* EVENT_NAME */
+        set_field_varchar_utf8(f, m_row.m_event_name, m_row.m_event_name_length);
+        break;
+      case 1: /* OBJECT_INSTANCE_BEGIN */
+        set_field_ulonglong(f, (intptr)m_row.m_identity);
+        break;
+      case 2: /* SOCKET_ID */
+        set_field_ulong(f, m_row.m_fd);
+        break;
+      case 3: /* IP */
+        set_field_varchar_utf8(f, m_row.m_ip, m_row.m_ip_length);
+        break;
+      case 4: /* PORT */
+        set_field_ulong(f, m_row.m_port);
+        break;
+      case 5: /* BYTES_READ */
+        set_field_ulonglong(f, m_row.m_bytes_read);
+        break;
+      case 6: /* BYTES_WRITE */
+        set_field_ulonglong(f, m_row.m_bytes_write);
+        break;
+      default:
+        DBUG_ASSERT(false);
+      }
+    }
+  }
+
+  return 0;
+}
+

=== added file 'storage/perfschema/table_socket_instances.h'
--- a/storage/perfschema/table_socket_instances.h	1970-01-01 00:00:00 +0000
+++ b/storage/perfschema/table_socket_instances.h	2010-12-07 19:50:08 +0000
@@ -0,0 +1,98 @@
+/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; version 2 of the License.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software Foundation,
+  51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef TABLE_SOCKET_INSTANCES_H
+#define TABLE_SOCKET_INSTANCES_H
+
+/**
+  @file storage/perfschema/table_socket_instances.h
+  Table SOCKET_INSTANCES (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_engine_table.h"
+
+/**
+  @addtogroup Performance_schema_tables
+  @{
+*/
+
+/** A row of PERFORMANCE_SCHEMA.SOCKET_INSTANCES. */
+struct row_socket_instances
+{
+  /** Column EVENT_NAME. */
+  const char *m_event_name;
+  /** Length in bytes of @c m_event_name. */
+  uint m_event_name_length;
+  /** Column OBJECT_INSTANCE_BEGIN */
+  const void *m_identity;
+  /** Column SOCKET_ID */
+  uint m_fd;
+  /** Column IP. */
+  const char *m_ip;
+  /** Length in bytes of @c m_ip. */
+  uint m_ip_length;
+  /** Column PORT */
+  uint m_port;
+  /** Column BYTES_READ */
+  ulonglong m_bytes_read;           // TBD
+  /** Column BYTES_WRITE */
+  ulonglong m_bytes_write;
+};
+
+/** Table PERFORMANCE_SCHEMA.SOCKET_INSTANCES. */
+class table_socket_instances : public PFS_engine_table
+{
+public:
+  /** Table share */
+  static PFS_engine_table_share m_share;
+  static PFS_engine_table* create();
+
+  virtual int rnd_next();
+  virtual int rnd_pos(const void *pos);
+  virtual void reset_position(void);
+
+private:
+  virtual int read_row_values(TABLE *table,
+                              unsigned char *buf,
+                              Field **fields,
+                              bool read_all);
+
+  table_socket_instances();
+
+public:
+  ~table_socket_instances()
+  {}
+
+private:
+  void make_row(PFS_socket *pfs);
+
+  /** Table share lock. */
+  static THR_LOCK m_table_lock;
+  /** Fields definition. */
+  static TABLE_FIELD_DEF m_field_def;
+
+  /** Current row. */
+  row_socket_instances m_row;
+  /** True if the current row exists. */
+  bool m_row_exists;
+  /** Current position. */
+  PFS_simple_index m_pos;
+  /** Next position. */
+  PFS_simple_index m_next_pos;
+};
+
+/** @} */
+#endif


Attachment: [text/bzr-bundle] bzr/chris.powers@oracle.com-20101207195008-tsk6161qu1ndwldv.bundle
Thread
bzr push into mysql-trunk-wl4896 branch (chris.powers:3210 to 3211) WL#4896Christopher Powers7 Dec